home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / archiver / lzhsourc.lzh / LZH.SRC / MAKE.BAT < prev    next >
DOS Batch File  |  1992-07-02  |  5KB  |  206 lines

  1. @echo off
  2. rem Batchdatei für Omikron.Mishell
  3. rem verarbeitet .MAK-Dateien
  4. rem
  5. close 1
  6. close 2
  7. local
  8. REM +--------------------------------------------------+
  9. REM I  Hier können Standardoptionen eingefügt werden   I
  10. REM +--------------------------------------------------+
  11. REM asmopt : Optionen für Assembler
  12. REM linkopt : Optionen für Linker
  13. REM tcopt=Optionen für Compiler
  14. set tcopt=-I%tdir%include -K
  15. set asmopt=
  16. set linkopt=
  17. set all=
  18. set f=
  19. set libdir=%tdir%lib\
  20. alias cc=set i=$drop( %1 ) :: gosub cc
  21. alias hcc=set i=$drop( %1 ) :: gosub hcc
  22. alias ass=set i=$drop( %1 ) :: gosub asm
  23. goto main
  24.  
  25. REM +--------------------------------------------------+
  26. REM I  Neue Optionen aus Makefile einfügen             I
  27. REM +--------------------------------------------------+
  28. :addopt
  29. let i=1
  30. set a=tcopt
  31. while "$par(#i %file%)" ne "" begin
  32.    set i=$par(#i %file%)
  33.    let i=#i+1
  34.    if %i% == -link begin
  35.        set a=linkopt
  36.        goto aopt
  37.    end
  38.    if %i% == -ass begin
  39.        set a=asmopt
  40.        goto opt
  41.    end
  42.    set %a%=%(%%a %i%
  43. :aopt
  44. end
  45. return
  46. REM +--------------------------------------------------+
  47. REM I Rufe den Compiler                                I
  48. REM +--------------------------------------------------+
  49. :cc
  50.  if def all goto cc1
  51.  if older %%i.o %%i.c begin
  52. :cc1
  53.     echo --- Compiling %%i.c ---
  54.     pcc %tcopt% %%i.c
  55.     set doit=1
  56.  end
  57.  write 3 %%file.o
  58. return
  59. REM +--------------------------------------------------+
  60. REM I Rufe den Compiler mit einem .H-File              I
  61. REM +--------------------------------------------------+
  62. :hcc
  63.  
  64.  if older %output% %%i.h begin
  65. :hcc1
  66.     echo --- Compiling %%i.h : $par(2 %file%) ---
  67.     pcc %tcopt% $par(2 %file%)
  68.     set doit=1
  69.  end
  70.  REM LINK wird nicht geändert, weil die .C-Datei nochmal extra angegeben wird.
  71. return
  72.  
  73.  
  74.  REM +--------------------------------------------------+
  75.  REM I    Rufe den Assembler                            I
  76.  REM +--------------------------------------------------+
  77. :asm
  78.  if def all goto asm1
  79.  if older %%I.o %I% begin
  80. :asm1
  81.     echo --- Assembling %I% ---
  82.     mas %asmopt% %I%
  83.     set doit=1
  84.  end
  85.  write 3 %%file.o
  86. return
  87.  
  88. REM +--------------------------------------------------+
  89. REM I               Hauptprogramm                      I
  90. REM +--------------------------------------------------+
  91. :main
  92. set i=%1
  93. if not def i goto usage
  94. if "$ext(%i%)" == "" set i=%%i.mak
  95. echo --- MAKE %i% ---
  96. REM +--------------------------------------------------+
  97. REM I   Aufteilung der Kommandozeilen-Optionen auf     I
  98. REM I   Compiler / Assembler / Linker / Make           I
  99. REM +--------------------------------------------------+
  100. shift
  101. if "%1" == "" goto noopt
  102. set a=tcopt
  103. while "%1" ne "" begin
  104.    if %1 == -link begin
  105.        set a=linkopt
  106.        goto opt
  107.    end
  108.    if %1 == -ass begin
  109.        set a=asmopt
  110.        goto opt
  111.    end
  112.    if %1 == -all begin
  113.        set all=1
  114.        goto opt
  115.    end
  116.    set %a%=%(%%a %1
  117. :opt
  118.   shift
  119. end
  120. :noopt
  121. REM +--------------------------------------------------+
  122. REM I Makefile lesen, dabei Obj-Dateinamen und OptionenI
  123. REM I merken. Obj-Dateien werden in die temporäre DateiI
  124. REM I L.LNK gespeichert.                               I
  125. REM +--------------------------------------------------+
  126. open 1 r %i%
  127. open 2 w %tmp%l.lnk
  128. open 3 w %tmp%l1.lnk
  129. read 1 output ::                rem Output-Datei
  130. set  link=
  131. set doit=
  132. write 3 -o=%output%
  133. while $eof(1) == 0 begin
  134.    read 1 file
  135.    echo %file%
  136.    set file=$drop(%file%)
  137.    if def file begin
  138.      if "$left(1 $drop(%file%))" == "-" begin
  139.         gosub addopt
  140.         goto next
  141.      end
  142.      REM *** e = Erweiterung vom Dateiname. Wenn leer setze "C"
  143.      set e=$ext($par(1 %file%)) :: REM Extension der 1. Datei
  144.      if not def e set e=c
  145.      REM *** Wenn Erweiterung ".c", dann compilieren, wenn ".asm" dann
  146.      REM *** assemblieren.
  147.      if %e% == asm ass %%file.asm
  148.      if %e% == s   ass %%file.s
  149.      if %e% == c   cc  %%file.c
  150.      if %e% == lib begin
  151.                      write 2 %libdir%%%file.lib
  152.                    end
  153.      if %e% == o   write 3 %%file.o
  154.      if %e% == h   hcc %file%
  155. :next
  156.    end
  157. end
  158. close 2
  159. open 2 r %tmp%l.lnk
  160.   while $eof(2) == 0 begin
  161.     read 2 a
  162.     write 3 %a%
  163.   end
  164.   close 2
  165. close 3
  166. close 1
  167. if not exists %output% goto link
  168. if def doit goto link
  169. goto quit
  170. :link
  171. echo --- Linking %output% ---
  172. type l1.link
  173. plink  -C=%tmp%l1.lnk %linkopt%
  174. goto quit
  175. REM +--------------------------------------------------+
  176. REM I     Aufrufmeldung                                I
  177. REM +--------------------------------------------------+
  178. :usage
  179. text
  180.  Einfaches MAKE für Turbo-C: Es muß eine Make-Datei angegeben werden. Diese
  181.  Datei hat folgenden Aufbau:
  182.  1. Zeile = zu erzeugendes Programm
  183.  alle übrigen Zeilen = Namen der einzubindenden .C .S .O und .LIB - Dateien
  184.  
  185.  Beispiel:
  186.  hello.mak=
  187.  
  188.    D:\tc\lib\tcstart.o
  189.    hello.c
  190.    TCSTDLIB.LIB
  191.  
  192.  Die Directorys werden direkt in MAKE.BAT eingetragen.
  193.  
  194.  mit SET TDIR wird das Directory für Turbo-C eingestellt. Directoryname
  195.  muß mit \ abgeschlossen werden.
  196. endtext
  197.  
  198.  
  199. :quit
  200. rem  @del l.lnk
  201. close 1
  202. close 2
  203. alias cc=
  204. alias ass=
  205.  
  206.